Return to MUSA 801 Projects Page

This project was completed for the MUSA/Smart Cities Practicum course (MUSA 801) instructed by Michael Fichman and Matthew Harris. We are grateful to our instructors for their continued support and feedback. We would like to give special thanks to KC Filippino and Ben McFarlane from Hampton Roads Planning District Commission, and Dexter Locke from the United States Forest Service for providing data, insight, and support throughout the semester. This project would not have been possible without them.

View Dashboard

1.Introduction

1.1 Abstract

This project aims to develop a precision forecast model for land cover change at the Chesapeake Watershed. By leveraging high-resolution longitudinal land cover data provided by the Chesapeake Conservancy, the model will predict land cover conversions from pervious to impervious surfaces. This forecast will enable land use and environmental planners to identify where urban growth will occur, propose green infrastructure accordingly, and prioritize lands for protection. The model will be generalizable to the county level, incorporating only widely available inputs, thus allowing any municipality within the Chesapeake basin to replicate the analysis. This proof-of-concept project will demonstrate the utility of precision conservation in land protection and green infrastructure planning and provide a valuable tool for planners and policymakers across the region.

1.2 Background

The Chesapeake Bay watershed is an ecologically and economically significant resource, encompassing diverse ecosystems and supporting a multitude of industries, including agriculture, tourism, and fisheries. However, the region is facing increasing environmental challenges due to the combined effects of sea-level rise and land subsidence. As a result, the area has become the second-most vulnerable region in the nation to flooding and storm surge, only after New Orleans. Predicting land cover changes, particularly the conversion from pervious to impervious surfaces, is crucial in addressing these challenges and informing climate adaptation and mitigation planning.

Our project focuses on three distinct counties within the Chesapeake Bay watershed, representing varying development contexts. Portsmouth is the urban prototype characterized by its dense residential, commercial, and industrial areas. James City County exemplifies a suburban context, with a mix of rural, suburban, and urban development and a diverse landscape encompassing forests, wetlands, and historic sites. Lastly, Isle of Wight County represents the rural aspect, predominantly characterized by agriculture, forestry, and extensive natural habitats. By considering these diverse counties, we can develop a comprehensive and generalizable model to predict land cover changes across various regional development scenarios.

1.3 Motivation & Use Case

To build resilient communities, the HRPDC has set up a green infrastructure plan. This plan aims to to identify and prioritize a network of valuable conservation lands in order to achieve multiple benefits, such as habitat protection, drinking water supply protection, stormwater management and recreational opportunities. A new component of this plan is to build a model for the potential future growth and identify which areas of the green infrastructure network are most at risk for development.

Green Infrastructure Plan for Hampton Roads Region

2. Data and Methods

2.1 Understanding landcover data

The Chesapeake Conservancy supplies us with high-resolution landcover data at 2013/14 and 2017/18 , which is essential for our precision conservation efforts. This data is a vast raster dataset with an impressive 1-meter accuracy, offering 900 times more detail than the commonly used 30-meter resolution National Land Cover Dataset. This level of detail is critical in capturing subtle changes in land use and land cover. Within the landcover classification, pervious surfaces include categories such as tree canopy, shrub, and wetlands, which allow water to infiltrate the ground, while impervious surfaces encompass categories like roads and structures that prevent water infiltration, leading to increased runoff and potential flooding issues. This detailed classification enables us to better understand and predict land cover changes, particularly the conversion from pervious to impervious surfaces.

Data Source

2.2 Ohter data

To understand how landcover change is affected by other environmental, social and economical factors, we also acquire data from the following source:

2.3 Unit of analysis

To make it easier for our future analysis, we gathered and resampled all data to 10 x 10 meters resolution as the basic analysis unit to ensure consistency.

3. Exploratory Analysis

3.1 Enviornmental Factors

Take Portsmouth county as example, we find that landcover change from pervious to impervious tend to happens at in where has less canopy area, far away from water, and slope is steeper.

3.2 Social and Economical Factors

### 3.3 Feature engineering

dependent: pervious to impervious surface during the period 2014-201

independent:

lccover change 能change
1. `originallc` originallandcover

2. `lcp` permeable/impermeable:
< 6 - 0
>= 6 - 1

3. `lcchange` whether landcover has changed: 1

4. `lc` 3*3的permeable rate:
0-1(0.1,0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8)

5. `popchange` per m^2

6. `pctwhitechange`

7. `unitchange` per m^2

8. `medhhincchange` per m^2

9. `road` road 1/0

10. `water` water

11. `canopy` tree canopy:
tree canopy - 1
tree canopy over structure -0.5
tree canopy over other -0.5
tree canopy over road - 0.5
other - 0

12. `perm` permeable:
2 -shrub - 0.3
4 - herb - 0.3
5 - wetand - 0.4
other -0

13. `barren` barren:
6 - barren - 1
not barren - 0

14. `struct` structure:
7 - structure - 1
not structure - 0

15. `other` other:
8 - other - 1
not other - 0

16. `terrain`dem

17. `slope`slope

18. `area` m^2 per block group

19. `geoid`-- blockgroup id

20. `soil type`-

模型encode:categorial:尤其是

possible features per 10*10 :

Road density distance to rivers

impervious / pervious landcover type population density population change per 4 year median hh income median hh income change per 4 year percentage of white population percentage of white population change per 4 year percentage of changing from impervious to pervious/from pervious to impervious in 4 years predicted landcover type:

possible features per block group :

percentage of impervious / pervious change: population population change per 4 year median hh income median hh income change per 4 year percentage of white population percentage of white population change per 4 year percentage of changing from impervious to pervious/from pervious to impervious in 4 years predicted landcover type composition:

possible feautres per county:

percentage of impervious / pervious change: population population change per 4 year median hh income median hh income change per 4 year percentage of white population percentage of white population change per 4 year percentage of changing from impervious to pervious/from pervious to impervious in 4 years predicted landcover type composition: development speed defined by: speed of population change and landcover change speed Agricultural land use, vegetation cover and water loss:

4. Modeling & Evaluation

4.1 Enviornmental Factors

5. Conclusion

6. Code Appendix

LS0tDQp0aXRsZTogIlByZWNpc2lvbiBGb3JlY2FzdHMgb2YgTGFuZCBDb3ZlciBDaGFuZ2UiDQpzdWJ0aXRsZTogIkNoZXNhcGVha2UgV2F0ZXJzaGVkIg0KYXV0aG9yOiAiWXVld2VuIERhaSwgU2h1amluZyBZaSwgWGluZ2UgWmhhbmciDQpkYXRlOiAiMjAyMy0wNC0yNSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiAiaGlkZSINCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KW1JldHVybiB0byBNVVNBIDgwMSBQcm9qZWN0cyBQYWdlXShodHRwczovL3Blbm5tdXNhLmdpdGh1Yi5pby9NVVNBXzgwMS5pby8pDQoNClRoaXMgcHJvamVjdCB3YXMgY29tcGxldGVkIGZvciB0aGUgTVVTQS9TbWFydCBDaXRpZXMgUHJhY3RpY3VtIGNvdXJzZSAoTVVTQSA4MDEpIGluc3RydWN0ZWQgYnkgTWljaGFlbCBGaWNobWFuIGFuZCBNYXR0aGV3IEhhcnJpcy4gV2UgYXJlIGdyYXRlZnVsIHRvIG91ciBpbnN0cnVjdG9ycyBmb3IgdGhlaXIgY29udGludWVkIHN1cHBvcnQgYW5kIGZlZWRiYWNrLiBXZSB3b3VsZCBsaWtlIHRvIGdpdmUgc3BlY2lhbCB0aGFua3MgdG8gS0MgRmlsaXBwaW5vIGFuZCBCZW4gTWNGYXJsYW5lIGZyb20gSGFtcHRvbiBSb2FkcyBQbGFubmluZyBEaXN0cmljdCBDb21taXNzaW9uLCBhbmQgRGV4dGVyIExvY2tlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgRm9yZXN0IFNlcnZpY2UgZm9yIHByb3ZpZGluZyBkYXRhLCBpbnNpZ2h0LCBhbmQgc3VwcG9ydCB0aHJvdWdob3V0IHRoZSBzZW1lc3Rlci4gVGhpcyBwcm9qZWN0IHdvdWxkIG5vdCBoYXZlIGJlZW4gcG9zc2libGUgd2l0aG91dCB0aGVtLg0KDQpbVmlldyBEYXNoYm9hcmRdKGh0dHBzOi8veXVld2VuZGFpLmdpdGh1Yi5pby9NVVNBLVByYWN0aWN1bS1XZWIvKQ0KDQojIyAxLkludHJvZHVjdGlvbg0KIyMjIDEuMSBBYnN0cmFjdA0KVGhpcyBwcm9qZWN0IGFpbXMgdG8gZGV2ZWxvcCBhIHByZWNpc2lvbiBmb3JlY2FzdCBtb2RlbCBmb3IgbGFuZCBjb3ZlciBjaGFuZ2UgYXQgdGhlIENoZXNhcGVha2UgV2F0ZXJzaGVkLiBCeSBsZXZlcmFnaW5nIGhpZ2gtcmVzb2x1dGlvbiBsb25naXR1ZGluYWwgbGFuZCBjb3ZlciBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBDaGVzYXBlYWtlIENvbnNlcnZhbmN5LCB0aGUgbW9kZWwgd2lsbCBwcmVkaWN0IGxhbmQgY292ZXIgY29udmVyc2lvbnMgZnJvbSBwZXJ2aW91cyB0byBpbXBlcnZpb3VzIHN1cmZhY2VzLiBUaGlzIGZvcmVjYXN0IHdpbGwgZW5hYmxlIGxhbmQgdXNlIGFuZCBlbnZpcm9ubWVudGFsIHBsYW5uZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHVyYmFuIGdyb3d0aCB3aWxsIG9jY3VyLCBwcm9wb3NlIGdyZWVuIGluZnJhc3RydWN0dXJlIGFjY29yZGluZ2x5LCBhbmQgcHJpb3JpdGl6ZSBsYW5kcyBmb3IgcHJvdGVjdGlvbi4gVGhlIG1vZGVsIHdpbGwgYmUgZ2VuZXJhbGl6YWJsZSB0byB0aGUgY291bnR5IGxldmVsLCBpbmNvcnBvcmF0aW5nIG9ubHkgd2lkZWx5IGF2YWlsYWJsZSBpbnB1dHMsIHRodXMgYWxsb3dpbmcgYW55IG11bmljaXBhbGl0eSB3aXRoaW4gdGhlIENoZXNhcGVha2UgYmFzaW4gdG8gcmVwbGljYXRlIHRoZSBhbmFseXNpcy4gVGhpcyBwcm9vZi1vZi1jb25jZXB0IHByb2plY3Qgd2lsbCBkZW1vbnN0cmF0ZSB0aGUgdXRpbGl0eSBvZiBwcmVjaXNpb24gY29uc2VydmF0aW9uIGluIGxhbmQgcHJvdGVjdGlvbiBhbmQgZ3JlZW4gaW5mcmFzdHJ1Y3R1cmUgcGxhbm5pbmcgYW5kIHByb3ZpZGUgYSB2YWx1YWJsZSB0b29sIGZvciBwbGFubmVycyBhbmQgcG9saWN5bWFrZXJzIGFjcm9zcyB0aGUgcmVnaW9uLg0KDQojIyMgMS4yIEJhY2tncm91bmQgDQpUaGUgQ2hlc2FwZWFrZSBCYXkgd2F0ZXJzaGVkIGlzIGFuIGVjb2xvZ2ljYWxseSBhbmQgZWNvbm9taWNhbGx5IHNpZ25pZmljYW50IHJlc291cmNlLCBlbmNvbXBhc3NpbmcgZGl2ZXJzZSBlY29zeXN0ZW1zIGFuZCBzdXBwb3J0aW5nIGEgbXVsdGl0dWRlIG9mIGluZHVzdHJpZXMsIGluY2x1ZGluZyBhZ3JpY3VsdHVyZSwgdG91cmlzbSwgYW5kIGZpc2hlcmllcy4gSG93ZXZlciwgdGhlIHJlZ2lvbiBpcyBmYWNpbmcgaW5jcmVhc2luZyBlbnZpcm9ubWVudGFsIGNoYWxsZW5nZXMgZHVlIHRvIHRoZSBjb21iaW5lZCBlZmZlY3RzIG9mIHNlYS1sZXZlbCByaXNlIGFuZCBsYW5kIHN1YnNpZGVuY2UuIEFzIGEgcmVzdWx0LCB0aGUgYXJlYSBoYXMgYmVjb21lIHRoZSBzZWNvbmQtbW9zdCB2dWxuZXJhYmxlIHJlZ2lvbiBpbiB0aGUgbmF0aW9uIHRvIGZsb29kaW5nIGFuZCBzdG9ybSBzdXJnZSwgb25seSBhZnRlciBOZXcgT3JsZWFucy4gUHJlZGljdGluZyBsYW5kIGNvdmVyIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aGUgY29udmVyc2lvbiBmcm9tIHBlcnZpb3VzIHRvIGltcGVydmlvdXMgc3VyZmFjZXMsIGlzIGNydWNpYWwgaW4gYWRkcmVzc2luZyB0aGVzZSBjaGFsbGVuZ2VzIGFuZCBpbmZvcm1pbmcgY2xpbWF0ZSBhZGFwdGF0aW9uIGFuZCBtaXRpZ2F0aW9uIHBsYW5uaW5nLg0KDQpPdXIgcHJvamVjdCBmb2N1c2VzIG9uIHRocmVlIGRpc3RpbmN0IGNvdW50aWVzIHdpdGhpbiB0aGUgQ2hlc2FwZWFrZSBCYXkgd2F0ZXJzaGVkLCByZXByZXNlbnRpbmcgdmFyeWluZyBkZXZlbG9wbWVudCBjb250ZXh0cy4gUG9ydHNtb3V0aCBpcyB0aGUgdXJiYW4gcHJvdG90eXBlIGNoYXJhY3Rlcml6ZWQgYnkgaXRzIGRlbnNlIHJlc2lkZW50aWFsLCBjb21tZXJjaWFsLCBhbmQgaW5kdXN0cmlhbCBhcmVhcy4gSmFtZXMgQ2l0eSBDb3VudHkgZXhlbXBsaWZpZXMgYSBzdWJ1cmJhbiBjb250ZXh0LCB3aXRoIGEgbWl4IG9mIHJ1cmFsLCBzdWJ1cmJhbiwgYW5kIHVyYmFuIGRldmVsb3BtZW50IGFuZCBhIGRpdmVyc2UgbGFuZHNjYXBlIGVuY29tcGFzc2luZyBmb3Jlc3RzLCB3ZXRsYW5kcywgYW5kIGhpc3RvcmljIHNpdGVzLiBMYXN0bHksIElzbGUgb2YgV2lnaHQgQ291bnR5IHJlcHJlc2VudHMgdGhlIHJ1cmFsIGFzcGVjdCwgcHJlZG9taW5hbnRseSBjaGFyYWN0ZXJpemVkIGJ5IGFncmljdWx0dXJlLCBmb3Jlc3RyeSwgYW5kIGV4dGVuc2l2ZSBuYXR1cmFsIGhhYml0YXRzLiBCeSBjb25zaWRlcmluZyB0aGVzZSBkaXZlcnNlIGNvdW50aWVzLCB3ZSBjYW4gZGV2ZWxvcCBhIGNvbXByZWhlbnNpdmUgYW5kIGdlbmVyYWxpemFibGUgbW9kZWwgdG8gcHJlZGljdCBsYW5kIGNvdmVyIGNoYW5nZXMgYWNyb3NzIHZhcmlvdXMgcmVnaW9uYWwgZGV2ZWxvcG1lbnQgc2NlbmFyaW9zLg0KDQohW10oaW1hZ2VzL0hSUERDLmpwZykNCg0KDQojIyMgMS4zIE1vdGl2YXRpb24gJiBVc2UgQ2FzZQ0KDQpUbyBidWlsZCByZXNpbGllbnQgY29tbXVuaXRpZXMsIHRoZSBIUlBEQyBoYXMgc2V0IHVwIGEgZ3JlZW4gaW5mcmFzdHJ1Y3R1cmUgcGxhbi4gVGhpcyBwbGFuIGFpbXMgdG8gdG8gaWRlbnRpZnkgYW5kIHByaW9yaXRpemUgYSBuZXR3b3JrIG9mIHZhbHVhYmxlIGNvbnNlcnZhdGlvbiBsYW5kcyBpbiBvcmRlciB0byBhY2hpZXZlIG11bHRpcGxlIGJlbmVmaXRzLCBzdWNoIGFzIGhhYml0YXQgcHJvdGVjdGlvbiwgZHJpbmtpbmcgd2F0ZXIgc3VwcGx5IHByb3RlY3Rpb24sIHN0b3Jtd2F0ZXIgbWFuYWdlbWVudCBhbmQgcmVjcmVhdGlvbmFsIG9wcG9ydHVuaXRpZXMuIEEgbmV3IGNvbXBvbmVudCBvZiB0aGlzIHBsYW4gaXMgdG8gYnVpbGQgYSBtb2RlbCBmb3IgdGhlIHBvdGVudGlhbCBmdXR1cmUgZ3Jvd3RoIGFuZCBpZGVudGlmeSB3aGljaCBhcmVhcyBvZiB0aGUgZ3JlZW4gaW5mcmFzdHJ1Y3R1cmUgbmV0d29yayBhcmUgbW9zdCBhdCByaXNrIGZvciBkZXZlbG9wbWVudC4NCg0KW0dyZWVuIEluZnJhc3RydWN0dXJlIFBsYW4gZm9yIEhhbXB0b24gUm9hZHMgUmVnaW9uXShodHRwczovL3d3dy5ocnBkY3ZhLmdvdi9kZXBhcnRtZW50cy9wbGFubmluZy9ncmVlbi1pbmZyYXN0cnVjdHVyZS1wbGFuLWZvci1oYW1wdG9uLXJvYWRzLXJlZ2lvbi8pDQoNCiMjIDIuIERhdGEgYW5kIE1ldGhvZHMNCg0KIyMjIDIuMSBVbmRlcnN0YW5kaW5nIGxhbmRjb3ZlciBkYXRhDQpUaGUgQ2hlc2FwZWFrZSBDb25zZXJ2YW5jeSBzdXBwbGllcyB1cyB3aXRoIGhpZ2gtcmVzb2x1dGlvbiBsYW5kY292ZXIgZGF0YSBhdCAyMDEzLzE0IGFuZCAyMDE3LzE4ICwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBvdXIgcHJlY2lzaW9uIGNvbnNlcnZhdGlvbiBlZmZvcnRzLiBUaGlzIGRhdGEgaXMgYSB2YXN0IHJhc3RlciBkYXRhc2V0IHdpdGggYW4gaW1wcmVzc2l2ZSAxLW1ldGVyIGFjY3VyYWN5LCBvZmZlcmluZyA5MDAgdGltZXMgbW9yZSBkZXRhaWwgdGhhbiB0aGUgY29tbW9ubHkgdXNlZCAzMC1tZXRlciByZXNvbHV0aW9uIE5hdGlvbmFsIExhbmQgQ292ZXIgRGF0YXNldC4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgaW4gY2FwdHVyaW5nIHN1YnRsZSBjaGFuZ2VzIGluIGxhbmQgdXNlIGFuZCBsYW5kIGNvdmVyLiBXaXRoaW4gdGhlIGxhbmRjb3ZlciBjbGFzc2lmaWNhdGlvbiwgcGVydmlvdXMgc3VyZmFjZXMgaW5jbHVkZSBjYXRlZ29yaWVzIHN1Y2ggYXMgdHJlZSBjYW5vcHksIHNocnViLCBhbmQgd2V0bGFuZHMsIHdoaWNoIGFsbG93IHdhdGVyIHRvIGluZmlsdHJhdGUgdGhlIGdyb3VuZCwgd2hpbGUgaW1wZXJ2aW91cyBzdXJmYWNlcyBlbmNvbXBhc3MgY2F0ZWdvcmllcyBsaWtlIHJvYWRzIGFuZCBzdHJ1Y3R1cmVzIHRoYXQgcHJldmVudCB3YXRlciBpbmZpbHRyYXRpb24sIGxlYWRpbmcgdG8gaW5jcmVhc2VkIHJ1bm9mZiBhbmQgcG90ZW50aWFsIGZsb29kaW5nIGlzc3Vlcy4gVGhpcyBkZXRhaWxlZCBjbGFzc2lmaWNhdGlvbiBlbmFibGVzIHVzIHRvIGJldHRlciB1bmRlcnN0YW5kIGFuZCBwcmVkaWN0IGxhbmQgY292ZXIgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoZSBjb252ZXJzaW9uIGZyb20gcGVydmlvdXMgdG8gaW1wZXJ2aW91cyBzdXJmYWNlcy4NCg0KIVtdKGltYWdlcy9EYXRhLnBuZykNCg0KW0RhdGEgU291cmNlXShodHRwczovL3d3dy5jaGVzYXBlYWtlY29uc2VydmFuY3kub3JnL2NvbnNlcnZhdGlvbi1pbm5vdmF0aW9uLWNlbnRlci9oaWdoLXJlc29sdXRpb24tZGF0YS9sdWxjLWRhdGEtcHJvamVjdC0yMDIyLykNCg0KDQojIyMgMi4yIE9odGVyIGRhdGENClRvIHVuZGVyc3RhbmQgaG93IGxhbmRjb3ZlciBjaGFuZ2UgaXMgYWZmZWN0ZWQgYnkgb3RoZXIgZW52aXJvbm1lbnRhbCwgc29jaWFsIGFuZCBlY29ub21pY2FsIGZhY3RvcnMsIHdlIGFsc28gYWNxdWlyZSBkYXRhIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2U6IA0KDQoqIFtERU0gKCAxIGFyYy1zZWNvbmQpIGZyb20gVVNHU10oaHR0cHM6Ly9hcHBzLm5hdGlvbmFsbWFwLmdvdi9kb3dubG9hZGVyLykNCg0KKiBbU29pbCBEYXRhIGZyb20gdGhlIFdlYiBTb2lsIFN1cnZleV0oaHR0cHM6Ly93ZWJzb2lsc3VydmV5Lm5yY3MudXNkYS5nb3YvYXBwLykNCg0KKiBjZW5zdXMgdHJhY3QtbGV2ZWwgZGF0YSAoMjAxNCwgMjAxOCwgMjAyMSkgZnJvbSBmb3VyIHllYXJzIG9mIHRoZSBBbWVyaWNhbiBDb21tdW5pdHkgU3VydmV5IChBQ1MpIA0KDQojIyMgMi4zIFVuaXQgb2YgYW5hbHlzaXMNClRvIG1ha2UgaXQgZWFzaWVyIGZvciBvdXIgZnV0dXJlIGFuYWx5c2lzLCB3ZSBnYXRoZXJlZCBhbmQgcmVzYW1wbGVkIGFsbCBkYXRhIHRvIDEwIHggMTAgbWV0ZXJzIHJlc29sdXRpb24gYXMgdGhlIGJhc2ljIGFuYWx5c2lzIHVuaXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5Lg0KDQoNCiFbXShpbWFnZXMvbWV0aG9kLnBuZykNCg0KIyMgMy4gRXhwbG9yYXRvcnkgQW5hbHlzaXMNCg0KIyMjIDMuMSBFbnZpb3JubWVudGFsIEZhY3RvcnMNCg0KDQohW10oaW1hZ2VzL3BvcnQtYmFyMi5wbmcpDQoNClRha2UgUG9ydHNtb3V0aCBjb3VudHkgYXMgZXhhbXBsZSwgd2UgZmluZCB0aGF0IGxhbmRjb3ZlciBjaGFuZ2UgZnJvbSBwZXJ2aW91cyB0byBpbXBlcnZpb3VzIHRlbmQgdG8gaGFwcGVucyBhdCBpbiB3aGVyZSBoYXMgbGVzcyBjYW5vcHkgYXJlYSwgZmFyIGF3YXkgZnJvbSB3YXRlciwgYW5kIHNsb3BlIGlzIHN0ZWVwZXIuDQoNCiFbXShpbWFnZXMvcG9ydC1iYXIyLnBuZykNCg0KIyMjIDMuMiBTb2NpYWwgYW5kIEVjb25vbWljYWwgRmFjdG9ycw0KDQoNCg0KIVtdKGltYWdlcy9wb3J0LWJhci5wbmcpDQojIyMgMy4zIEZlYXR1cmUgZW5naW5lZXJpbmcNCg0KDQoNCiMjIyMgZGVwZW5kZW50OiBwZXJ2aW91cyB0byBpbXBlcnZpb3VzIHN1cmZhY2UgZHVyaW5nIHRoZSBwZXJpb2QgMjAxNC0yMDENCiMjIyMgaW5kZXBlbmRlbnQ6DQogICAgbGNjb3ZlciBjaGFuZ2Ug6IO9Y2hhbmdlDQogICAgMS4gYG9yaWdpbmFsbGNgIG9yaWdpbmFsbGFuZGNvdmVyDQogICAgDQogICAgMi4gYGxjcGAgcGVybWVhYmxlL2ltcGVybWVhYmxlOg0KICAgIDwgNiAtIDANCiAgICA+PSA2IC0gMQ0KICAgIA0KICAgIDMuIGBsY2NoYW5nZWAgd2hldGhlciBsYW5kY292ZXIgaGFzIGNoYW5nZWQ6IDENCiAgICANCiAgICA0LiBgbGNgIDMqM+eahHBlcm1lYWJsZSByYXRlOg0KICAgIDAtMe+8iDAuMe+8jDAuMu+8jCAwLjPvvIwgMC4077yMIDAuNe+8jCAwLjbvvIwgMC4377yMIDAuOO+8iQ0KICAgIA0KICAgIDUuIGBwb3BjaGFuZ2VgIHBlciBtXjINCiAgICANCiAgICA2LiBgcGN0d2hpdGVjaGFuZ2VgDQogICAgDQogICAgNy4gYHVuaXRjaGFuZ2VgIHBlciBtXjINCiAgICANCiAgICA4LiBgbWVkaGhpbmNjaGFuZ2VgIHBlciBtXjINCiAgICANCiAgICA5LiBgcm9hZGAgcm9hZCAxLzANCiAgICANCiAgICAxMC4gYHdhdGVyYCB3YXRlcg0KICAgIA0KICAgIDExLiBgY2Fub3B5YCB0cmVlIGNhbm9wee+8mg0KICAgIHRyZWUgY2Fub3B5IC0gMQ0KICAgIHRyZWUgY2Fub3B5IG92ZXIgc3RydWN0dXJlIC0wLjUNCiAgICB0cmVlIGNhbm9weSBvdmVyIG90aGVyIC0wLjUNCiAgICB0cmVlIGNhbm9weSBvdmVyIHJvYWQgLSAwLjUNCiAgICBvdGhlciAtIDANCiAgICANCiAgICAxMi4gYHBlcm1gIHBlcm1lYWJsZToNCiAgICAyIC1zaHJ1YiAtIDAuMw0KICAgIDQgLSBoZXJiIC0gMC4zDQogICAgNSAtIHdldGFuZCAtIDAuNA0KICAgIG90aGVyIC0wDQogICAgDQogICAgMTMuIGBiYXJyZW5gIGJhcnJlbjoNCiAgICA2IC0gYmFycmVuIC0gMQ0KICAgIG5vdCBiYXJyZW4gLSAwDQogICAgDQogICAgMTQuIGBzdHJ1Y3RgIHN0cnVjdHVyZToNCiAgICA3IC0gc3RydWN0dXJlIC0gMQ0KICAgIG5vdCBzdHJ1Y3R1cmUgLSAwDQogICAgDQogICAgMTUuIGBvdGhlcmAgb3RoZXI6DQogICAgOCAtIG90aGVyIC0gMQ0KICAgIG5vdCBvdGhlciAtIDANCiAgICANCiAgICAxNi4gYHRlcnJhaW5gZGVtDQogICAgDQogICAgMTcuIGBzbG9wZWBzbG9wZQ0KICAgIA0KICAgIDE4LiBgYXJlYWAgbV4yIHBlciBibG9jayBncm91cA0KICAgIA0KICAgIDE5LiBgZ2VvaWRgLS0gYmxvY2tncm91cCBpZA0KICAgIA0KICAgIDIwLiBgc29pbCB0eXBlYC0NCg0KDQrmqKHlnotlbmNvZGXvvJpjYXRlZ29yaWFs77ya5bCk5YW25pivDQoNCnBvc3NpYmxlIGZlYXR1cmVzIHBlciAxMCoxMCA6DQoNClJvYWQgZGVuc2l0eQ0KKipkaXN0YW5jZSB0byByaXZlcnMqKg0KDQppbXBlcnZpb3VzIC8gcGVydmlvdXMNCmxhbmRjb3ZlciB0eXBlDQpwb3B1bGF0aW9uIGRlbnNpdHkNCnBvcHVsYXRpb24gY2hhbmdlIHBlciA0IHllYXINCm1lZGlhbiBoaCBpbmNvbWUNCm1lZGlhbiBoaCBpbmNvbWUgY2hhbmdlIHBlciA0IHllYXINCnBlcmNlbnRhZ2Ugb2Ygd2hpdGUgcG9wdWxhdGlvbg0KcGVyY2VudGFnZSBvZiB3aGl0ZSBwb3B1bGF0aW9uIGNoYW5nZSBwZXIgNCB5ZWFyDQpwZXJjZW50YWdlIG9mIGNoYW5naW5nIGZyb20gaW1wZXJ2aW91cyB0byBwZXJ2aW91cy9mcm9tIHBlcnZpb3VzIHRvIGltcGVydmlvdXMgaW4gNCB5ZWFycw0KcHJlZGljdGVkIGxhbmRjb3ZlciB0eXBlOg0KDQpwb3NzaWJsZSBmZWF0dXJlcyBwZXIgYmxvY2sgZ3JvdXAgOg0KDQpwZXJjZW50YWdlIG9mIGltcGVydmlvdXMgLyBwZXJ2aW91cyBjaGFuZ2U6DQpwb3B1bGF0aW9uDQpwb3B1bGF0aW9uIGNoYW5nZSBwZXIgNCB5ZWFyDQptZWRpYW4gaGggaW5jb21lDQptZWRpYW4gaGggaW5jb21lIGNoYW5nZSBwZXIgNCB5ZWFyDQpwZXJjZW50YWdlIG9mIHdoaXRlIHBvcHVsYXRpb24NCnBlcmNlbnRhZ2Ugb2Ygd2hpdGUgcG9wdWxhdGlvbiBjaGFuZ2UgcGVyIDQgeWVhcg0KcGVyY2VudGFnZSBvZiBjaGFuZ2luZyBmcm9tIGltcGVydmlvdXMgdG8gcGVydmlvdXMvZnJvbSBwZXJ2aW91cyB0byBpbXBlcnZpb3VzIGluIDQgeWVhcnMNCnByZWRpY3RlZCBsYW5kY292ZXIgdHlwZSBjb21wb3NpdGlvbjoNCg0KcG9zc2libGUgZmVhdXRyZXMgcGVyIGNvdW50eToNCg0KcGVyY2VudGFnZSBvZiBpbXBlcnZpb3VzIC8gcGVydmlvdXMgY2hhbmdlOg0KcG9wdWxhdGlvbg0KcG9wdWxhdGlvbiBjaGFuZ2UgcGVyIDQgeWVhcg0KbWVkaWFuIGhoIGluY29tZQ0KbWVkaWFuIGhoIGluY29tZSBjaGFuZ2UgcGVyIDQgeWVhcg0KcGVyY2VudGFnZSBvZiB3aGl0ZSBwb3B1bGF0aW9uDQpwZXJjZW50YWdlIG9mIHdoaXRlIHBvcHVsYXRpb24gY2hhbmdlIHBlciA0IHllYXINCnBlcmNlbnRhZ2Ugb2YgY2hhbmdpbmcgZnJvbSBpbXBlcnZpb3VzIHRvIHBlcnZpb3VzL2Zyb20gcGVydmlvdXMgdG8gaW1wZXJ2aW91cyBpbiA0IHllYXJzDQpwcmVkaWN0ZWQgbGFuZGNvdmVyIHR5cGUgY29tcG9zaXRpb246DQpkZXZlbG9wbWVudCBzcGVlZCBkZWZpbmVkIGJ5OiBzcGVlZCBvZiBwb3B1bGF0aW9uIGNoYW5nZSBhbmQgbGFuZGNvdmVyIGNoYW5nZSBzcGVlZA0KQWdyaWN1bHR1cmFsIGxhbmQgdXNlLCB2ZWdldGF0aW9uIGNvdmVyIGFuZCB3YXRlciBsb3NzOg0KDQoNCiMjIDQuIE1vZGVsaW5nICYgRXZhbHVhdGlvbg0KDQojIyMgNC4xIEVudmlvcm5tZW50YWwgRmFjdG9ycw0KDQoNCiMjIDUuIENvbmNsdXNpb24NCg0KIyMgNi4gQ29kZSBBcHBlbmRpeA0K